package exam122011;
import java.util.*;

/***********************************************************************
 * Module:  Configuration.java
 * Author:  29004847
 * Purpose: Defines the Class Configuration
 ***********************************************************************/


/** @pdOid 380bcf08-b3af-4dc9-a857-3db14cc3a826 */
public class Configuration implements Element {
	public Configuration() {
		super();
		this.alim = new Alimentation();
		this.graphique = new ArrayList<CarteGraphique>();
		this.memoire = new ArrayList<Memoire>();
		this.reseau = new ArrayList<CarteReseau>();
		this.procs = new ArrayList<Processeur>();
	}

	/** @pdRoleInfo migr=no name=Processeur assc=association1 coll=List impl=ArrayList mult=0..* type=Aggregation */
	private List<Processeur> procs;
	/** @pdRoleInfo migr=no name=CarteReseau assc=association3 coll=List impl=ArrayList mult=0..* type=Aggregation */
	private List<CarteReseau> reseau;
	/** @pdRoleInfo migr=no name=CarteGraphique assc=association4 coll=List impl=ArrayList mult=0..* type=Aggregation */
	private List<CarteGraphique> graphique;
	/** @pdRoleInfo migr=no name=Alimentation assc=association5 mult=0..1 type=Aggregation */
	private Alimentation alim;
	/** @pdRoleInfo migr=no name=Memoire assc=association7 coll=List impl=ArrayList mult=0..* type=Aggregation */
	private List<Memoire> memoire;


	/** @pdGenerated default iterator getter */
	public Iterator getIteratorProcs() {
		if (procs == null)
			procs = new ArrayList<Processeur>();
		return procs.iterator();
	}

	/** @pdGenerated default add
	 * @param newProcesseur */
	public void addProcs(Processeur newProcesseur) {
		if (newProcesseur == null)
			return;
		if (this.procs == null)
			this.procs = new ArrayList<Processeur>();
		if (!this.procs.contains(newProcesseur))
			this.procs.add(newProcesseur);
	}

	/** @pdGenerated default remove
	 * @param oldProcesseur */
	public void removeProcs(Processeur oldProcesseur) {
		if (oldProcesseur == null)
			return;
		if (this.procs != null)
			if (this.procs.contains(oldProcesseur))
				this.procs.remove(oldProcesseur);
	}

	/** @pdGenerated default iterator getter */
	public Iterator getIteratorReseau() {
		if (reseau == null)
			reseau = new ArrayList<CarteReseau>();
		return reseau.iterator();
	}

	/** @pdGenerated default add
	 * @param newCarteReseau */
	public void addReseau(CarteReseau newCarteReseau) {
		if (newCarteReseau == null)
			return;
		if (this.reseau == null)
			this.reseau = new ArrayList<CarteReseau>();
		if (!this.reseau.contains(newCarteReseau))
			this.reseau.add(newCarteReseau);
	}

	/** @pdGenerated default remove
	 * @param oldCarteReseau */
	public void removeReseau(CarteReseau oldCarteReseau) {
		if (oldCarteReseau == null)
			return;
		if (this.reseau != null)
			if (this.reseau.contains(oldCarteReseau))
				this.reseau.remove(oldCarteReseau);
	}

	/** @pdGenerated default iterator getter */
	public Iterator getIteratorGraphique() {
		if (graphique == null)
			graphique = new ArrayList<CarteGraphique>();
		return graphique.iterator();
	}

	/** @pdGenerated default add
	 * @param newCarteGraphique */
	public void addGraphique(CarteGraphique newCarteGraphique) {
		if (newCarteGraphique == null)
			return;
		if (this.graphique == null)
			this.graphique = new ArrayList<CarteGraphique>();
		if (!this.graphique.contains(newCarteGraphique))
			this.graphique.add(newCarteGraphique);
	}

	/** @pdGenerated default remove
	 * @param oldCarteGraphique */
	public void removeGraphique(CarteGraphique oldCarteGraphique) {
		if (oldCarteGraphique == null)
			return;
		if (this.graphique != null)
			if (this.graphique.contains(oldCarteGraphique))
				this.graphique.remove(oldCarteGraphique);
	}

	/** @pdGenerated default iterator getter */
	public Iterator getIteratorMemoire() {
		if (memoire == null)
			memoire = new ArrayList<Memoire>();
		return memoire.iterator();
	}

	/** @pdGenerated default add
	 * @param newMemoire */
	public void addMemoire(Memoire newMemoire) {
		if (newMemoire == null)
			return;
		if (this.memoire == null)
			this.memoire = new ArrayList<Memoire>();
		if (!this.memoire.contains(newMemoire))
			this.memoire.add(newMemoire);
	}

	/** @pdGenerated default remove
	 * @param oldMemoire */
	public void removeMemoire(Memoire oldMemoire) {
		if (oldMemoire == null)
			return;
		if (this.memoire != null)
			if (this.memoire.contains(oldMemoire))
				this.memoire.remove(oldMemoire);
	}

	@Override
	public void accept(Visitor v) {
		
		v.visitConfiguration(this);
	}

}